package org.idea.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 普通类 - Servlet类 - 服务器程序 - 运行在服务器中的程序(Tomcat)，是一个特殊的类
 * 服务于客户（浏览器）发起的 HTTP 请求 - 实现相关的业务逻辑（处理） - 响应
 *
 * Servlet(WEB服务器[Tomcat]) = 服务员（超市）
 *
 * 编写 Servlet 程序的操作步骤：
 * 第一：定义一个类并且继承 HttpServlet - is-a - 注意：在工程中，导入 servlet-api.jar 依赖 (Tomcat)
 *
 * 第二：重写相关的 doXxx 方法，实现处理客户端发起的 Xxx 请求
 *  doPost
 *  doGet
 *  ...
 *
 *  第三：编写代码，实现具体业务逻辑（功能）
 *
 *  第四：配置访问的地址  - 区别于普通Java程序，需要 main 方法
 *      xml配置
 *      注解
 *
 *
 * @Author zqx
 * @Date 2023-10-08
 */

// 第一：定义一个类，并继承 HttpServlet
// 第四：配置访问的地址
// /：表示项目的上下文路径 -- http://localhost:8080/taobao/
@WebServlet("/hello")
public class HelloWorldServlet extends HttpServlet {
    // 第二：重写 doXxx 方法，实现对 xxx 的请求进行处理
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


        try {
            // 多线程 - 睡眠
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }


        // 第三：编写代码，实现具体业务逻辑（功能）
        // 1.获得 PrintWriter 对象
        PrintWriter out = resp.getWriter();
        // 2.通过 PrintWriter 对象，向浏览器打印输出数据
        out.println("<h1>GET:Hello,Servlet</h1>");
        // 3.关闭对象，释放资源
        out.flush();
        out.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 第三：编写代码，实现具体业务逻辑（功能）
        // 1.获得 PrintWriter 对象
        PrintWriter out = resp.getWriter();
        // 2.通过 PrintWriter 对象，向浏览器打印输出数据
        out.println("<h1>POST:Hello,Servlet</h1>");
        // 3.关闭对象，释放资源
        out.flush();
        out.close();
    }
}
